package net.wanho.service.sys.impl;


import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import lombok.extern.slf4j.Slf4j;
import net.wanho.mapper.sys.MenuMapper;
import net.wanho.po.sys.Menu;
import net.wanho.service.sys.MenuServiceI;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestBody;

import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @项目名称: [cms]
 * @类名称: [MenuServiceImpl]
 * @类描述: [菜单权限表业务逻辑层实现]
 * @创建人: [choco]
 * @创建时间: [2020-07-30 09:36:32]
 * @修改人: []
 * @修改时间: []
 * @修改备注: []
 * @版本: []
 * @版权: []
 */
@Service
@Slf4j
public class MenuServiceImpl implements MenuServiceI {

    @Autowired
    private MenuMapper menuMapper;

    /**
     * @方法名: [selectMenuById]
     * @方法描述: [查询菜单权限表信息]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @Override
    public Menu selectMenuById(Long menuId) {
        try {
            return menuMapper.selectMenuById(menuId);
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }

    /**
     * @方法名: [selectMenuList]
     * @方法描述: [查询菜单权限表列表]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @Override
    public List<Menu> selectMenuList(Menu menu) {
        try {
            return menuMapper.selectMenuList(menu);
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }

    /**
     * @方法名: [insertMenu]
     * @方法描述: [新增菜单权限表信息]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @Override
    public int insertMenu(@RequestBody Menu menu) {
        try {
            return menuMapper.insertMenu(menu);
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }

    /**
     * @方法名: [updateMenu]
     * @方法描述: [修改菜单权限表信息]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @Override
    public int updateMenu(@RequestBody Menu menu) {
        try {
            return menuMapper.updateMenu(menu);
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }

    /**
     * @方法名: [deleteMenuByIds]
     * @方法描述: [删除菜单权限表信息]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 09:36:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @Override
    public int deleteMenuByIds(String ids) {
        try {
            return menuMapper.deleteMenuByIds(ids.split(","));
        } catch (Exception e) {
            log.error(e.getMessage());
            throw new RuntimeException(e);
        }
    }

    /**
     * @方法名: [findMenusByUserId]
     * @方法描述: [根据用户Id获取菜单]
     * @创建人: [choco]
     * @创建时间: [2020-07-30 16:16:32]
     * @修改人: []
     * @修改时间: []
     * @修改备注: []
     */
    @Override
    public Set<String> findMenusByUserId(Long userId) {
        // 根据ID获取所有用户关联菜单
        Set<Menu> menus = menuMapper.findMenusByUserId(userId);

        // 获取菜单的Perms字符串
        Set<String> menuSet = new HashSet<>();
        for(Menu menu:menus){
            if(ObjectUtil.isNotEmpty(menu) && StrUtil.isNotEmpty(menu.getPerms()))
                menuSet.add(menu.getPerms());
        }
        return  menuSet;
    }

}
